/***********************************************************************************
 * 文件名： bmlite.h
 * 版本： 6
 * 说明：
 * 		一个极度精简的电池管理组件，提供基本的电池事件通知。
 *      在合适的地方调用 BMLite_Loop() 确保其在100ms左右执行一次。在程序启动时调用一次
 *  BMLite_Init() 初始化本组件。通过 BMLite_SetRefreshStatus 可以暂时关闭或者启动状态刷新。
 *  可以调用对应的函数接口主动获取一些状态，这些接口在头文件中有申明和说明。当有状态变化时，
 *  本组件会通过调用 BMLite_Event 来进行通知，你必须在需要接收通知的地方定义 BMLite_Event 
 *  函数，它的使用类似一个中断函数，通过名称来识别，函数原型为 
 *  void BMLite_Event(bmlite_ev_t e)。
 *      必须在 bmlite_config.h 文件中进行合适的配置，本组件才能工作在你期望的状态。
 * 修改记录：
 * 	2021/04/29: 初版。 刘言。
 *  2021/05/07: 增加获取电池电量的功能。刘言。
 *  2021/05/17: 增加当启用SWST且充电器接入时，仅在MOS开启时进行ADC采集的功能。刘言。
 *  2021/07/20: 
 *      现在 _BMLITE_MAX_ADV 设置为256比255更节省代码量；
 *      修复ADC正推模式电量计算错误；
 *      增加获取电池电压的API。
 *  2021/08/16: 某些变量增加 NO_INIT 修饰。
 *  2021/09/06: 电量获取更准确，增加配置更新电量的间隔时间。
***********************************************************************************/
#ifndef _BMLITE_H_
#define _BMLITE_H_

#include <stddef.h>
#ifdef __NO_INCLUDE_PATH
#include "..\..\..\projects\prj\bsp\bmlite_config.h"
#else
#include "bmlite_config.h"
#endif
#include "..\..\polsys.h"

typedef enum _bmlite_ev
{
    BMLITE_EV_NULL,
    BMLITE_EV_DC_PULL_IN,
    BMLITE_EV_DC_PULL_OUT,
    BMLITE_EV_START_CHARGE,
    BMLITE_EV_CHARGE_FULL,      // 已充满，若启用SWST则SWST已停止充电（MOS断开）
    _BMLITE_EV_END
}bmlite_ev_t;


// 仅仅是为了使用伪函数优化而曝光以下属性

extern NO_INIT bit _BMLite_mRunning;
extern bit _BMLite_mIsCharging;
extern bit _BMLite_mDCConnected;
extern bit _BMLite_mNoBattery;
#ifdef _BMLITE_USE_BATT_LEVEL
extern u8 _BMLite_mLevel;
#endif


// APIS

// 初始化
void BMLite_Init();

// 100ms执行一遍用于刷新电池状态
void BMLite_Loop();

// 设置刷新状态
// 开启或者关闭状态刷新
#define BMLite_SetRefreshStatus(bool_new_stat)  \
{\
	_BMLite_mRunning = bool_new_stat;\
}

// 获取是否正在充电的状态
#define BMLite_IsCharging()     _BMLite_mIsCharging

// 获取充电器是否已连接的状态
#define BMLite_DCConnected()    _BMLite_mDCConnected

// 获取是否没电的状态
#define BMLite_NoBattery()      _BMLite_mNoBattery

#ifdef _BMLITE_USE_BATT_LEVEL
// 获取电量百分比
#define BMLite_GetBattLevel()   _BMLite_mLevel
#else
#define BMLite_GetBattLevel()   0
#endif

#ifdef _BMLITE_USE_GET_VOLTAGE
// 获取电池电压(mV)
u16 BMLite_GetBattVoltage();
#endif

#endif
